#将字符串转化为数字
#a=int("123")

#print(type(a),a)
#错误示范，想要将字符串转换为数字，必需要求字符串的内容都是数字。
#b=int("好运")
#print(type(b),b)
#整数转浮点数
#c=float("3")
#print(type(c),c)
#浮点数转整数
#d=int(3.141592678)
#print(type(d),d)

#算数（数学）运算符
#print('1+1=',1+1)
#print('3-2=',3-2)
#print('2*2=',2*2)
#print('9/4=',9/4)
#print('9**2=',9**2)
# print('11//2=',11//2)
# print('10%1=',10%1)

#赋值运算符
#num=1+2*3

#复合赋值运算符
#+=
#num=10
#num+=1#mean：num=num+1
#print("num+=1：",num)
#num-=1
#print("num-=1：",num)
#num*=8
#print("num*=8：",num)
# # num/=2
# print("num/=2：",num)
# num=100
# num%=9
# print("num%=9：",num)
# num**=3
# print("num**=3：",num)
# num=11
# num//=2
# print("num//=2：",num)

#单引号定义法
#name='嘻嘻'
#print(type(name),name)
#双引号定义法
#name="猪猪"
#print(type(name),name)
#三引号定义法
name='''
猪猪
好可爱'''
#引号嵌套，可以用\来进行转义，这样子就不会犯语法错误
#print(type(name),name)
#num="\"12\""
#print(type(num),num)

#通过占位形式，完成拼接
#name="猪猪"
#message="爱睡大觉的：%s"%name
#print(message)
#通过占位形式，完成数字和字符串的拼接
#age=21
#num=13360390985
#message='猪猪今年%s岁啦，他的电话号码是；%s'%(age,num)
#print(message)
#字符串格式化中，三种不同类型变量的占位；1.字符串%s,2.整数%d,3.浮点数%f
#name="617大饭馆"
#set_up_year=2022
#stock_price=20.99
#message="我的宿舍是:%s,它成立于：%d,今天的股价是：%f"%(name,set_up_year,stock_price)
#print(message)
#格式化的精度控制：
#num1=20
#num2=20.999
#print("数字20宽度限制5，结果是:%5d"%num1)
#print("数字20宽度限制1，结果是:%1d"%num1)
#print("数字20.999宽度限制7，精度2，结果是：%7.2f"%num2)
#print('数字20.999不限制宽度小数精度2，结果是:%.2f'%num2)
#快速字符串格式化的方法：1.可以通过f"{变量}{变量}"的方式进行快速格式化
#2这种方式：不理会类型，不做精度控制，适合对精度没有要求的时候快速使用
#a='617大饭馆'
#b=2022
#c=20.999
#print(f"{a}成立于{b}年，股票是{c}。")
#演示表达式对字符串格式化  ；无需变量时直接把表达式往()写
#print("11*11的结果是:%d"%(11*11))
#print(f"234*235的结果是：{234*235}")
#print("'pig'在字符串中的类型是：%s"%type('pig'))
#练习：股价计算小程序
#name="617大饭馆"
#stock_price=19.99
#stock_code='003032'
#stock_price_growth_factor=1.2
#growth_days=7
#finally_stock_price=stock_price*stock_price_growth_factor**growth_days
#用f"（{变量}）"的方式输入
#print(f"{name},当前股票价格是{'%.2f'%stock_price}，股票代码：{stock_code}" )
#用%占位符的方式输入
#print("每日增长系数是:%.1f,经过%d天的增长后,股价涨到了：%.2f"%(stock_price_growth_factor,growth_days,finally_stock_price))
#演示python的input语句
#name=input("请告诉你是谁？")
#print("Get!!!你是%s" % name)
#input练习-欢迎登入小程序
#user_name=input("你好，请输入您的用户名；")
#user_type="sssssvip"
#print("您好%s,您是尊贵的%s用户，欢迎您的光临！"%(user_name,user_type))
#比较运算符（==,【表示不等于用】！=，>,<,>=,<=）
#a=3
#b=3
#print(a==b)
#a=1
#b=3
#print(a!=b)
#a=7
#b=3
#print(a>b)
#a=3
#b=7
#print(a<b)
#a=3
#b=3
#print(a>=b)
#a=3
#b=3
#print(a<=b)
#定义变量存储布尔类型的数据
#bool_1=True
#bool_2=False
#print(f'bool_1变量的内容是：{bool_1}，类型是：{type(bool_1)}')
#print(f'bool_2变量的内容是：{bool_2}，类型是：{type(bool_2)}')
#比较符的使用
#==, !=,>,<,>=,<=
#演示进行内容的相等比较
# num1=10
# num2=10
# print(f"10==10的结果是：{num1==num2}")
#num1=10
#num2=15
#print(f'10!=15的结果是：{num1!=num2}')
#num1="itcast"
#num2='itheima'
#print(f'itcast=itheima的结果是：{num1==num2}')
# num1=10
# num2=5
# print(f"10>5结果是{num1>num2}")
# print(f"10<5结果是{num1<num2}")
#演示python判断语句：if语句的基本格式应用
#age=10
#if age>=18:
#     print('我已经成年了')
#     print("即将步入大学生活")
#print("时间过的真快")
#if的综合练习
#print("欢迎来到游乐场，儿童免费，成人收费。")
#age=input("请输入你的年龄：")
#age=int( age )
#if age>=18:
#    print("您已成年，游玩需补票10元。")
#print("祝您游玩愉快。")
#if-else组合判断语句练习:我要买票吗
#print("欢迎来到动物园")
#high=int(input('请输入您的身高(cm):'))
#if high>=120:
#    print("您的身高超出120cm,游玩需要购票10元。")
#else:
#    print("您的身高未超出120cm，可以免费游玩。")
#print("祝您游玩愉快。")
#if_elif_else组合使用的语法 -练习题
# if int(input('请输入第一次猜想的数字:'))==10:
#     print("恭喜第一次就猜对了呢")
# elif  int(input("错了，请再猜一次:"))==10:
#     print("恭喜第二次就猜对了呢")
# elif  int(input("又错了，请再猜最后一次："))==10:
#     print('恭喜第三次猜对了')
# else:
#     print("sorry,全部猜错了，我想的是：10")
# 判断语句的嵌套使用
# print('欢迎来到动物园')
# if int(input('输入您的身高:'))>120:
#     print('您的身高＞120，不可免费')
#     print("不过如果您的VIP等级＞3，可以免费游玩")
#     if int(input('输入您的VIP等级:') )>3:
#         print('恭喜你，您的VIP等级>3,可以免费游玩')
#     else:
#         print('sorry,您需补票10元')
# else:
#     print("欢迎您，免费游玩")
#自由组合嵌套；
# age=20
# year=1
# rank=6
# if age >=18:
#     print("您已成年！")
#     if age<30:
#         print("您的年龄符合条件。")
#         if year>2:
#             print('恭喜你，你的入职时间符合条件，可以领取奖品。')
#         elif rank>3:
#             print('恭喜您，您的等级符合条件，可以领取奖品。')
#         else:
#             print('您的入职时间和年龄都不符合，不可领取奖品')
#     else:
#         print("您的年龄太大了，不可领取")
# else:
#     print('您的年龄太小，不可领取')
#判断语句综合案例
#import random
#num=random.randint(1,10)
#guess_number= int(input("请输入你要猜测的数字的是:"))
#if num==guess_number:
#    print("恭喜你！猜对了")
#else:
#    if num>guess_number:
#        print("猜错了")
#        print('太小了，请再猜一次')
#    else:
#        print("太大了，请再猜一次:")
#    guess_number= int(input("请再一次输入你要猜测的数字的是:"))
#    if num==guess_number:
#                 print("恭喜你！两次就猜对了")
#    else:
#     if num<guess_number:
#         print("又猜错了，太大了")
#        print('请猜第三次')
#    else:
#         print('又猜错了，太小了')
#         print('请猜第三次')
#    guess_number= int(input("请再一次输入你要猜测的数字的是:"))
#    if num==guess_number:
#                 print("恭喜你！终于猜对了")
#    else:
#         print("全错")
# while循环的基础运用
# i=0
# while i<100:
#       print("pig,好可爱")
#       i+=1
#while循环结构的练习题
#sum=0
#i=1
#while i<=100:
#    sum+=i
#    i+=1
#print(f"1-100累加的和是：{sum}")
#练习
#sum=0
#i=1
#while i<=100:
#      sum+=i
#      i+=1
#    print(f"1-100累加的和是：{sum}")
#  问题:while的循环语法格式，不是除了while＋条件，其它都要空格进行缩进吗  ,为啥print那个不需要缩进?
#
#4.4python课
#txt='Neusoft'
#x=txt.center(20,"*")   "*" 作用：填充空格
#print(x)
#txt='apple，apple '
#x=txt.count("apple")
#print(x)
#通过循环去求一个数的代码
# x=int(input("please input an integer") )
# ans=0
# iterLeft=x
# while iterLeft!=0:
#     ans=ans+x
#     iterLeft= iterLeft-1
# print(str(x)+"*"+str(x)+"="+str(ans) )
#问题answer；x是用户输入的数据不会受iterleft的影响。
#print后面的代码体现了如何用加法去实现乘法
#important point:设置while循环的的属性：1循坏外设迭代变量（iterleft）；
#                                    2需测试变量，确定是否完成；
#                                    3需改变循环内的变量，使它向终点0推进（iterLeft= iterLeft-1）
#
# 法1；从小到大
#n=int(input('请输入1一个数字：'))
#a=1
#sum=0
#while a<=n:
#     sum=sum+a
#     a+=1
#    print(sum)
#法2：从大到小；
# n=int(input("please enter an itegar" )
# sum=0
# while n!=0:
#     sum=sum+n
#     n-=1
# print(sum)
#n=int(input('please enter an itegar'))
#a=1
#sum=0
#while n>=a:
#    sum=sum+n
#    a+=1
#print(sum)
#**重点** ↓是n=10时，对'1'的累加，即1累加了10次，结果是10
#问：如果我要累加100到0，修改什么，然后输入什么值即可-----------------------------------将+1改为+n，并且令n=100
# n=int(input ('please enter an interar'))
# sum=0
# while n!=0:
#     sum=sum+1
#     n-=1
# print(sum)
#for循环：
#for x in 'Nusoft':
#     print(x)
# sum=0
# for x in range(50,101):
#      sum=sum+x
#     # print(x)
# print(sum)


#while循环练习
# n=int(input("请输入一个数字："))
# sum=0
# while n!=0:
#     sum=sum+n
#     n-=1
# print(sum)
#法2：
#1先做循环终止条件的设置 i=1   用 sum去累加i值
# i=1
# sum=0
# while i<=100:
#     i+=1
#   sum=sum+i
#👆有错，i+=1与sum=sum+i的位置需要互换
#问题：sum对i进行累加，为啥不能把sum放在后面
#print(f'1-100的和累加等于：{sum}')
#
#while循环-猜数字案例
#import random
#num=random.randint(1,100)
#count=0
#Guess=True
#while Guess:
#    guess_num=int(input('输入你猜测的数字：'))
#    count+=1
#    if num==guess_num:
#        print("恭喜你，猜对了！")
#        flag=False
#    if  guess_num>num:
#      print("sorry,太大了请再猜一次")
#    if guess_num<num:
#      print('sorry,太小了，请再输入一次')
#print(f"你一共猜了{i}次")
#网课讲解
#获取范围在1-100的随机数字
# import random
# num=random.randint(1,100)
# i=0
# #通过布尔类型的变量，做循环是否继续的标记
# flag=True
# while flag:
#     guess_num=int(input("请输入你猜测的数字:") )
#     i+=1
#     if guess_num==num:
#         print('猜中了')
#         #设置为False就是终止循环的条件
#         flag=False
#     else:
#         if guess_num>num:
#             print("大了")
#         else:
#             print('小了')
# print(f"你总共猜测了{i}次")
#while 循环的嵌套应用:需要利用空格缩进来决定层次关系           ；注意条件设置，避免出现无限循环
#外层循环   表白100天的控制  while i<=100:
#内层循环   每天的表白都送十支玫瑰花的控制 while j<=10 :
#外层循环的控制变量
#i=1
#while i<=100:
#    print(f"向小美表白的第{i}天")
#     #内层循环的控制变量
#    j=1
#    while j<=10 :
#          print(f'给小美送的第{j}朵花')
#          #控制内层循环
#          j+=1
#    #控制外层循环
#    i+=1
#    print("小美，我喜欢你")
#    #注意坚持的i是100时满足条件，所以会再循环一次导致表白成功天数多一天，所以↓要改成i-1天才对
#print(f"坚持到第{i-1}天表白成功")
#使用print语句不换行的方法在内容后面打个，end=''   eg:
# print("Hello",end="")
# print("world",end="")
#利用制表符 ，使得print语句对齐
#print("Hello\tworld")
#print("pig  \tLin")
#使用while嵌套循环，打印九九乘法表：
#=1
#hile i<=9:
#
#j=1
#while j<=i:
#    print(f"{j}*{i}={i*j}\t",end='')
#    j+=1
#i+=1
#print()
#
#4.6python课
#The range()Function
#i=0
#for x in range(3,31,3):
#    i+=1
#    print(x)
#print(f"一共循环了{i}次
# for x in range(21001,21011)
#     print("NUIT"+str(x))
#listc列表            apple下标为0，banana为1   cherry为倒数第一个
#list1=["apple","banana","cherry"]
#print(list1[1])
#print(list1[-1])
# fruits =["apple","banana","cherry"]
# for x in fruits:
#     if x=="banana":
#         print(' red '+x)
#”in“的用法：    循环i，去代表s中的每一个字母
#s='python'
#for i in s:
#    print(i)
#'break'的用法
# list1=["apple","banana","cherry"]
# for x in list1:
#    if x=="banana":
#     print(x)
#       break
#“continue”-跳过 的作用   注意print 的位置：unreachable-不可到达
#fruits =["apple","banana","cherry"]
#a=0
#for x in fruits:
#  if x=="banana":
#     continue
#  a+=1   #注意a+=1的位置，对应的语句块   tab打出的空格比较工整 ，tab一次打四个空格
#         #错误:将continue 和a+=1对齐会导致其中的a+=1这一行被跳过，不被运行，所以打代码时要注意语句块之间的关系，多读才能找到错误
#  print(x)
#print(a)
#for else 循环语句
# for x in range(6):
#     if x ==3:break     #这个把for循环砍掉了，所以不会执行else
#     print(x)
# else:
#     print("For LooP finished!")
#“
# for x in range(6):
#     if x ==3:continue     #continue只是跳过当前变量”3“，其它还会继续运行
#     print(x)
# else:
#     print("For LooP finished!")
#***Nested Loop 循环嵌套      外层循环for走一次，内层走3次
# a=["red","big","tasty"]
# fruits =["apple","banana","cherry"]
# for x in a:
#    for y in fruits:
#        print(x,y)
#练习
#print(1)
#print(2)
#
#print("1",end=" ")
#print('')
#print(2)
#
#print('1,1')
#print(end="2, ")
#print('2，2，2')

#for x in range(5):
#    for x in range (5):
#         print("* ")
#
#
#for y in range(5):
#    for x in range (5):
# print("* ")
#          print("* ",end=" ")
#    print("")
#
# for i in range(5):
#    for j in range(5):
#        print("* ",end=' ')
#    print(" ")
#
##print语句输出不换行功能：
#print("hello ")
#print("world")
##👇不换行输入
# print("hello",end="")
# print(' world')
#
# #对齐功能用\t去占空格
# print("hello\tworld")
# print("apple\tabanbanana")

#练习-打印九九乘法表
#i=1
#
#while i<=9:
#
#    j=1
#
#    while j<=i:
#          print(f"{j}*{i}={i*j}\t",end='')
#          j+=1
#    i+=1
#    print()
# i=1         #定义外层循环的控制变量
# # #j=1
# while i<=9:#1控制行循环
#
#     j=1     #定义内层循环的控制变量
#     while j<=i:#2控制行内容
#         #j+=1
#         print(f"{j}*{i}={i*j}\t",end='')       #内层循环print语句，不换行,end=''👉不换行的符号   ，通过\t制表符进行对齐
#         #print()
#         j+=1
#     #i+=1
#    print()  #print空内容，就是输出一个换行的意思
#   i+=1
##for循环：将待办事项逐个完成的循环机制
#name='Aileen' #定义被处理的数据
#for x in name:
#    #将name的内容，挨个取出赋予x临时变量
#    #就可在循环体内对x进行处理
#    print(x)
 #计如下字符串中，有多少个a
# name='itheima is a brand of itcast'
# i=0 #定义一个变量i，用来统计有多少个a
# #for循环统计
# #for临时变量in被统计数据:
# for x in name:
#     if x=="a":
#         i+=1
# print(f'被统计的字符串一共出现了{i}次a')
#range语句-3个语法
##1range（num）
#for x in range(10):
#    print(x)
##2range(num1,num2)
#for x in range(1,11):
#      print(x)
##3range(num1,num2,step)
#for x in range(1,11,2):
#       print(x)
#num=100
# i=0
#for x in range (1,num):
#     print(x%2)
#     if x%2==0:
#         i+=1
# print(f"1到{num}，偶数一共出现了{i}次")
#if str(input("Please enter the correct code:"))=="0620":
#   print('The code is correct.')
#else:
#    print('The code is incorrect.')

# s = "          Hello, World! "
# print(s.strip())
# a =int(input("The 1st length: "))
# b = int(input("The 2nd length: "))
# c = int(input("The 3rd length: "))
# if a+b>c and a+c>b and b+c>a and a-b<c and a-c<b and b-c<a:
#     print("these three number can be the length of a triangle.")
# else:
#     print("these three number can't  be the length of a triangle.")
# sum=0
# for x in range(0,100,3):
#     sum+=x
# print(sum)

# sum=0
# for x in range (0,51):
#      for y in range(0,101):
#         for z in range(0,101):
#             if x+y+z==100 and x*2+y*1+z*0.5<=100:
#
#                   print("购买方式"+str(sum)+':'+str(x)+'只A鸡'+str(y)+'只B鸡'+str(z)+"只c鸡")
#                   sum+=1
# a = int(input("The 1st length: "))
# b = int(input("The 2nd length: "))
# c = int(input("The 3rd length: "))
# if a + b > c and a + c > b and b + c > a and a - b < c and a - c < b and b - c < a:
#     if a == b or a == c or b == c or a == b == c:
#         print("these three number can be the length of a triangle.")
# else:
#     print("these three number can't  be the length of a triangle.")
# a = int(input("The 1st length: "))
# b =  int(input("The 2nd length: "))
# c =  int(input("The 3rd length: "))
# if a+b>c and a+c>b and b+c>a and a-b<c and a-c<b and b-c<a :
#     if a**2+b**2==c**2 or b**2+c**2==a**2 or a**2+c**2==b**2:
#         print("these three number can be the right-angled triangle triangle.")
# else:
#         print("these three number can't  be the right-angled triangle triangle.")



#python 4.10 list用法  list是储存数据集合的4种内置函数之一 用：[]
#list1=['a',"b",'c']
#print(list1)
#ordered:有顺序的  changeable：可变的 值可重复
#changeable：可变的  例子↓
# a=1
# a=2
# 内存只有一个，且包含1，2两个值
# 如果是is则a=2会代替1
#list1=['a',"b",'c']
#print(list1[1])#第一项的索引index是0，即a→0
#print(list1[-1])
#**Range of indexes索引范围 eg
# list2=['a',"b",'c',"o","k","m","n"]
# print(list2[2:5])#左取右不取
# print(list2[:4])
# print(list2[2:])
# print(list2[-4:-1])
#*Check if item exists
# list1=['a',"b",'c']
# if "a"in list1:
#     print("yes,'apple'is in the fruit list")
#*change list items更改特定的项目值
# list1=['a',"b",'c']
# list1[1]="oo"
# print(list1)
# list1=['a',"b",'c',"o","k",'m']
# list1[1:3]=['aa',"bb",]
# print(list1)
#*insert items
# list1=['a',"b",'c']
# list1.insert(2,'watermelon')
# print(list1)     #outcome:['a', 'b', 'watermelon', 'c']

# #*Add list items  -- two ways
# #First: append("")进行附加   append增补 items
# list1=['a',"b",'c']
# list1.append('orange')
# print(list1)#结果：['a', 'b', 'c', 'orange']
# #Insert items
# list1.insert(1,"melon") #1是将melon加到第一个位置，即原来b的位置
# print(list1)#结果：['a', 'melon', 'b', 'c', 'orange']
# #***summary:区别：一个是追加，一个是插入。追加（append）从最后追加，插入（insert）可以随意

# #Extend list--扩展列表   用extend（）方法 其它列表追加到当前列表
# list1=['a',"b",'c']
# tropical=["m","p","y"]
# list1.extend(tropical)
# print(list1)

#Remove list items 去除列表--2 ways
# 1Remove specified item--  用remove（）  删除指定项
# 二、remove()
# 1、按照值来删除；
# 2、传递待删除元素，如果多个元素一样，默认删除第一个；
# 3、不会返回被删除的值
# list1=[1,3,6,7,8]
# list1.remove(3)
# print( list1)
# print (list1.remove(1) )#对列表元素进行搜索删除，而不是下表
# print( list1)
#结果：[1, 6, 7, 8]
#None                 👉说明不会返回被删除的值1
#[6, 7, 8]

# 2Remove specified index--  用pop（）  删除指定索引
# pop()
# 1、按位进行删除；
# 2、传递的是待删除元素的index；
# 3、会返回被删除的值。
# list1=["a","b","c"]
# list1.pop(0)
# print(list1)
# print(list1.pop(0))
#结果：['b', 'c']
# b                    👉说明会返回被删除的值b

#del keyword--删除关键字  👉方法：前＋del
# 可删除指定索引，也可删除整个列表 👇例子
# list=["a","b","c"]
# del  list[0]
# print(list)
#
# list1=["a","b","c"]
# del list1


# #clear the list--清除列表  👉方法；clear（） ！注意：列表仍存在，只是没有内容
# list1=["a","b","c"]
# list1.clear()
# print(list1)
#outcome；[]

# # For loop with list  嵌套循环
# fruit=["a","b","c"]
# color=["red"]
# for y in color:
#     for x in fruit:
#         if x=="b":
#             print(y, x)
#The break statement--暂停声明  👉用break
# fruit=["a","b","c"]
# for x in fruit:
#     print(x)
#     if x=="b":
#                 break
#  outcome:a
#          b
#
# fruit1=["a","b","c"]
# for x in fruit:
#     if x=="b":
#         break
#     print(x)
# outcome:a

# The continue statement--继续声明 👉用continue-跳过作用
# fruit1=["a","b","c"]
# for x in fruit1:
#     if x=="b":
#         continue
#     print(x)

# review exercises
# for x in range(5):
#     for y in range(5):
#       print("* ",end=" ") #对应内循环的for
#     print(" ")#对应外循环的for

#classess guess amd check 属于穷举法exhausted enumeration（作业中鸡的也是）
#ans→令他自增
#ans**3<x



#python 4.11 guess and check=exhaustive  enumeration穷举法  本质模拟人脑想法
#abs()
# print(abs(-1))绝对值函数
#cube root ：立方根
#integer：整数

# Code of Finding cube root of integer-利用代码找整数的立方根
# x=int(input('please enter a integer:'))
# num=0
# while num**3<x:#这里是如何猜测{generate guesses}
#     num+=1
# if num**3==x:#以下是我们如何检查是否得到了立方根
#     print("cube root of" +str(x)+"is"+str(num))
# else:
#     print(str(x)+"is not a perfect cube")
# point：The code only works for positive integers.👆

#负数 可以利用 abs()函数
# print(abs(-9))      outcome:9
# x=int(input("please enter a integer："))
# num=0
# while num**3<abs(x):
#     num+=1
# if num**3==abs(x) and x<0:
#     num=-num
#     print("cube root of" +str(abs(x))+"is"+str(num))
# else:
#     num=num
#     print("cube root of" +str(x)+"is"+str(num))
#loop characteristic循环特征：
#1.Need a loop variable-需要一个循环变量
#2.Initialize outside loop外面定义循环
#3.Changes within loop循环内部改变
#4.Test for termination depends on variable终止测试取决于变量
#5.Useful to think about a decrementing function考虑将程序变量集映射为整数的递减函数很有用
#6.Maps set of program variables into an integer当输入循环时，value是非负的当value <=0时，循环终止。
#7.When loop is entered, value is non-negative
#8.When value is <=0, loop terminates.
#9.The value is decreased every time through loop.

# Suppose we don’t initialize the variable
# Likely get a NameError. Or worse use an unexpected value to initialize the computation.
# 假设我们不初始化变量可能会出现名称错误。或者更糟的是，使用意外值来初始化计算。
#
# Suppose we don’t change the variable inside the loop?
# The program might end up with infinite loop, never reaching the terminating condition.
# 假设我们不改变循环中的变量？
# 程序可能会以无限循环结束，永远不会达到终止条件。

# Keep guessing until find the expected answer or guessed all values.
# The process is 👉exhaustive enumeration.
# 继续猜测，直到找到预期答案或猜到所有值。这个过程是穷尽列举。

# #用for循环去找整数的立方根
# x=int(input('please input a integer:'))
# for i in range (abs(x)+1):#因为左取右不取，所以要＋1，从而取到0到x的绝对值  注意num>=0
#     if i**3>=abs(x):   #想不明白为啥是大于等于
#         if x>0:
#             print(str(x)+"的立方根是"+str(i))
#         else:
#              print(str(x)+"的立方根是"+str(-i))
#         break
#

#while 循环    while ans**3<x：

# a = int(input("please enter a number: \n"))
# ans = int(-a)
# for ans in range(-a,abs(a)+1):
#     if ans ** 3 == abs(a):
#         if a<0:
#             ans = -ans
#             print("Cube root is " + str(ans))
#         else:
#             print("Cube root is " + str(ans))
#             break
#     else:
#          if ans **3>abs(a):
#             if a<0:
#                 ans= - ans
#                 print(str(a)+ "is not a perfect cube")
#                 print(ans)
#             else:
#                  print("Cube root is between " + str(ans - 1) + " and "+ str(ans))
#             break






# x=int(input("请输入一个数字"))
# for i in range(x+1):
#     if i**3>=x:
#         print(i)
#         x=i
#         break

# x = int(input("请输入一个数字"))#question:
# a=0
# for i in range(abs(x) + 1):#首先i是正数,由于左取右不取所以＋1
#      if i ** 3 >=abs(x):
#         a=i
#         break
# if i**3!=abs(x):
#     print(str(x) + ' is not a perfect cube.')
# else:
#         if x <0:#两种结果 所以用if语句 ，进行分情况讨论
#             print(-i)
#         else:
#             print(i)

# #
# #上课讲的for循环
# ans=0
# x=int(input("please input a integer:"))
# for i in range(abs(x)+1):
#     i+=1
#     if i**3>=abs(x):
#         ans==i
#         break
# if ans**3 != abs(x):
#     print(str(x) + ' is not a perfect cube.')
# else:
#     print("Cube root of " + str(x) + 'is' + str(ans))



#
# x = 29
# epsilon = 0.01
# guess = 0.0
# increment = 0.01#步长
# num_guesses = 0#记录运行次数
# while abs(guess**3 - x) >= epsilon and guess**3<=x :
#         guess += increment
#         print(guess) #print(结果对应的变量名称可以获得每一步的详细过程)
#         num_guesses += 1
# print('num_guess = ', num_guesses)#运行次数  穷举法
# if abs(guess** 3 - x) >= epsilon:
#     print("Failed on cube root of", x)
# else:
#     print(guess, " is close to the cube root of ", x)
#
# Binary search--二分法     Bin二进制的文件  square root平方根

#
# 1.range语句的功能是:
# 获得一个数字序列
# 2.range语句的语法格式
# 语法1:
# range(num)
# 语法2:
# range(num1，num2)
# 语法3: range(num1，num2，step)
# 3range语句的注意事项:
# 语法1从0开始，到num结束 (不含num本身)
# 语法2从num1开始，到num2结束(不含num2本身)
# 语法3从num1开始，到num2结束 (不含num2本身)步长以step值为准
# range的用途很多，多数用在for循环场景

# x=0
# for x in range(10):
#     print(x)#编程规范上for循环只限定在for循环内部
# print(x) # 因为这个循环不在for 内部，要等for遍历完以后，这个print才输出，
#         # 又因为for循环的最后一次遍历的是range的最后一位，∴从0开始计数是9

# 用for循环向小美表白100天，每天送10朵玫瑰。
# for x in range(1,101):#一开始是(101),导致送花从第0天开始送，但是现实问题没有第0天
#                       # ，所以要用括号限制范围(1,101),从1到100天
#     for i in range(11):
#         if x <=100 :
#             if i==10:
#                print('向小美表白的第'+str(x)+"天，送出")
#                print(str(i)+"朵玫瑰")
# x=0
# for x in range(1,101):#一开始是(101),导致送花从第0天开始送，但是现实问题没有第0天
#                       # ，所以要用括号限制范围(1,101),从1到100天
#     for i in range(1,11):
#         if x <=100 :
#             if i<=10:
#                print('向小美表白的第'+str(x)+"天，送出")
#                print(str(i)+"朵玫瑰")
#                print("小美，我喜欢你")
# print(f"第{x}天，表白成功")

#for 和 while 可以相互嵌套  将上面改为内while 外for
# ***---👉for外，while内
# x=0
# for x in range (1,101):
#     i=1
#     while i<=10:
#         i+=1
#         print('向小美表白的第'+str(x)+"天，送出")
#         print(str(i-1) + "朵玫瑰")
#         print("小美，我喜欢你")
# print(f"第{x}天，表白成功")
# ***---👉while外，for内
# x=1
# while x <=100:
#     x+=1
#     for i in range (1,11):
#         print('向小美表白的第'+str(x-1)+"天，送出")
#         print(str(i) + "朵玫瑰")
# print(f"第{x-1}天，表白成功")

#练习-打印九九乘法表
#i=1
#
#while i<=9:
#
#    j=1
#
#    while j<=i:
#          print(f"{j}*{i}={i*j}\t",end='')
#          j+=1
#    i+=1
#    print()
# i=1         #定义外层循环的控制变量
# # #j=1
# while i<=9:#1控制行循环
#
#     j=1     #定义内层循环的控制变量
#     while j<=i:#2控制行内容
#         #j+=1
#         print(f"{j}*{i}={i*j}\t",end='')       #内层循环print语句，不换行,end=''👉不换行的符号   ，通过\t制表符进行对齐
#         #print()
#         j+=1
#     #i+=1
#    print()  #print空内容，就是输出一个换行的意思
#   i+=1
#for循环打印九九乘法表
# x=1
# for x in range (1,10):
#         y = 1
#         for y in range (1,x+1):
#             print(f'{x}*{y}={x * y}\t', end=" ")
#             y += 1
#         print("")
#         x+=1

#函数function:组织好的，可重复使用的，实现特定功能的代码段。
# 不使用内置函致Len()求，统计子符串的长度，
# str1 ="itheima!"
# str2 ="itcast"
# str3 ="python"
# #定义一个计数的变量
# count =0
# for i in str1:
#     count += 1
# print(f"字符串{str1}的长度是: {count}")
# count =0
# for i in str2:
#     count += 1
# print(f"字符串{str2}的长度是: {count}")
# count =0
# for i in str3:
#      count += 1
# print(f"字符串{str3}的长度是: {count}")
#
# #👆重复性劳动，低效     👇高效省事劳动
# #可以使田函数，来优化这个过程def my_len(data):
# def my_len(data):
#     count = 0
#     for i in data:
#         count += 1
#     print(f"字符串{data}的长度是{count}")
# my_len(str1)
# my_len(str2)
# my_len(str3)
#由上总结出函数的三大特点：1已组织好的 2可重复利用 3针对特定功能👉从而提高程序复用性，减少重复性代码，提高开发效率

# 函数的定义:
# def 函数名(传入参数):
#     函数体
#     return 返回值
#调用函数，让定义的函数开始工作
#函数名（参数）
#
# def cute_pig():
#     print('🐖是世界上最可爱的动物')
#
# #调用函数，让定义的函数开始工作
# cute_pig()

# ❗注意事项
# 参数如不需要，可以省略例如：👆的（）空空的没有参数(后续章节讲解)
# 返回值如不需要，可以省略(后续章节讲解)
# 函数必须先定义（用def）后使用（调用函数）

# def various_check():
#     print("欢迎来到我的世界!")
#     print("请出示你的72h病毒检测证明")
# various_check()

#函数的传入参数
#定义函数
# def add(x,y):#x，y为❗parameter👉定义-形式参数，可多个
#     result=x+y
#     print(f"{x}+{y}的结果是；{result}")
# #调用函数
# add(1,2)#x，y为❗argument👉调用-实际参数

# def various_check(x):
#     print(f"欢迎来到我的世界!请出示你的72h病毒检测证明")
#     if x>37.5:
#         print(f"请出示核酸证明，你的体温是{x},需要隔离")
#     else:
#         print(f"你的体温是{x},正常进入")
# various_check(40)


# #定义一个函数，完成2数相加功能
# def add(a,b):
#     result=a+b
#     # print("我完事了")
# # 通过返回值，将相加的结果返回给调用者
#     return result
# #返回结果后，还想输出一句话
#     # print("我完事了")#但输不出来--原因；由于结果返回了所以后面无论是什么都不会执行
#
# #函数的返回值，可以通过变量去接收
# r = add(5,6)
# print(r)

# 无return语句的函数返回值
# def say_hi():
#     print('hi')
# result=say_hi()
# print(f"无返回值函数，返回的内容是：{result}")
# print(f"无返回值函数，返回的内容类型是：{type(result)}")
#
# #主动返回None的函数
# def say_hi():
#     print('hi')
#     return None
# result=say_hi()
# print(f"无返回值函数，返回的内容是：{result}")
# print(f"无返回值函数，返回的内容类型是：{type(result)}")

#None类型的应用场景
#1.用在函数表示无返回值
#2.用在if判断,None等同于False
#  也会在函数中主动返回None,配合if判断做相关处理
#None用于if判断
# def check_age(age):
#     if age > 18:
#         return "SUCCESS"
#     else:
#         return None
# result = check_age(16)
# if result==None:#也可将result==None写成 not result 二者等价
# #进Aif表示result是None值 也就是FaLse
#     print("未成年，不可以进入")
#3.定义变量,暂时不需要变量有具体值 ,可用None代替
# eg:name=None

#利用函数说明文档
# def add(x,y):
#     """#(通过自己打这三个引号如何一回车,系统会自动将多行注释的格式打出来,
#          从而进行文档说明,帮助更好理解函数功能,例子如下,这些只是注释)
#     add函数可进行两数相加的功能
#     :param x: 形参x表示相加的一个数字
#     :param y: 形参y表示相加的另一个数字
#     :return: 返回值是2数相加的结果
#     """
#
#     result=x+y
#     print(f"结果是:{result}")
#     return result
# add(5,6)

# #函数--嵌套调用:在一个函数中,调用另一个函数
# 执行过程:函数
# # A中执行到调用函数B的语句,全部将函数B全部执行完以后,继续执行函数A剩余的内容,例子如下:
# def func_A():
#     print("---2---")
# def func_B():
#     print("---1---")
#     func_A()
#     print("---3---")
# #调用func_B
# func_B()
#如果函数B中调用了另一个函数A,
#那么先把函数B中的任务执行完毕之后才会回到上次函数A执行的位置
#变量作用域

#变量类型
# 1.局部变量:作用函数内部,在函数外部无法使用
# #演示局部变量
# def test_a():
#     num=100#👉局部变量
#     print(num)
# test_a()
# print(num)#出了函数体，局部变量num无法使用，so会报错SyntaxError: invalid decimal literal

# 2.全局变量:在函数内外部均可使用
# num=200#👉全局变量
# def test_a():
#     print(f"test_a:{num}")
# def test_b():
#     print(f"test_b:{num}")
# test_a()
# test_b()
# print(num)
#结果：
# test_a:200
# test_b:200
# 200
# 3.如何将函数内定义的变量声明为全局变量
# 利用global关键键字,global变量
# num=200#👉全局变量
# def test_a():
#     print(f"test_a:{num}")
# def test_b():
#     global num#设置内部定义的变量为全局变量
#     num=500#内部定义的变量
#     print(f"test_b:{num}")
# test_a()
# test_b()
# print(num)
# 结果：test_a:200
# test_b:500
# 500

#summary：1。调用函数，倘若内外部都有定义变量那么会调用内部的，内部未定义则用外部定义变量
#2.将变量内变外直接：global 变量。

# review:❗❗return的作用:有返回值-计算并保存
#返回值-就是程序完成事情后,最后给调用者的结果
# # eg:
# def add(a,b):
#     result=a+b
#     return result
# r=add(1,2)#调用者
# print(r)
#
# def add(a,b):
#     result=a+b
#     return result
# print(add(1,2))
#
# def add(a,b):
#     result=a+b
# r=add(1,2)
# print(add(1,2))
#
# #结果:3
# # 3
# # None
# # summary:没有return无法输出结果.
#
#
# #综合案例
#
# money=5000000
# name=None
# name=input('please input your name:')
# #定义查询函数
# def check(x):
#     if x:#❗难点1❗:利用if 判断语句--结合布尔类型的参数x去通过调用函数check_a(输入False/True)
#         # 在后面进行print内容的选择性输出[通过参数x控制内容输出]
#         print("---------查询余额--------------")
#     print(f"{name}你好，您的余额剩余：{money}元")
# #定义存款函数
# def saving(num):
#     global money#通过global将函数内部定义的money变为全局变量
#     money+=num
#     print("----------存款-----------------")
#     print(f"{name}你好，您存款{num}元成功.")
#     #调用check函数查询余额
#     check(False)
# #定义取款函数
# def get_money(num):
#     global money#通过global将函数内部定义的money变为全局变量
#     money-=num
#     print("----------取款-----------------")
#     print(f"{name}你好，您取款{num}元成功.")
#     check(False)
# #定义主菜单函数
# def main():
#     print("---------主菜单--------------")
#     print(f"{name},您好,欢迎来到ATM.请选择操作:")
#     print("查询余额\t[输入1]")#利用制表符\t占据空格进行对齐
#     print("存款\t\t[输入2]")
#     print("取款\t\t[输入3]")
#     print("退出\t\t[输入4]")
#     return input("请输入您的选择:")
# #设置无限循环，确保程序不退出
# while True:
#     y= main()
#     if y =="1":
#         check(True)
# #通过continue继续下一次循环，一进来就是回到了主菜单
#         continue
#     elif y =="2":
#         num = int(input("您想要存多少钱?请输入:"))
#         saving(num)
#         continue
#     elif y == "3":
#         num = int(input("您想要取多少钱?请输入:"))
#         get_money(num)
#         continue
#     else:
#         print("程序退出啦")
#         break

# 1.什么是数据容器-一种可以储存多个元素的python数据类型
# 2.python中数据容器的类型：
# list（列表）、tuple（元组）、str（字符串）、set（集合）、dic（字典）

#列表的下标索引用于取出对应位置元素：语法：列表[下标索引] --也可反向索引最后一个从-1依次递减  eg；
# list1=['T','L','R']
# print(list1[0])
# print(list1[-1])
#❗注意索引不能超出范围，否则会报错
#如果是列表嵌套列表，也可以利用下标索引
# list=[["L",'c'],['M','N']]
# print(list[1][0])
#外层第一个列表↑  ↑为外层第一列表内0号元素

# 列表功能（方法）
# list=['i',"t",'p','o','i']
# 1列表的查询--index法
# (下标索引)功能--语法；列表.index（元素）   找不到报错valueerror
# index=list.index("p")
# print(f'p在列表中的下标索引是：{index}')
# #如果元素不存在，报错--eg：
# index=list.index("h")
# print(f'h在列表中的下标索引是：{index}')
# 2插入元素--
# 语法：列表.insert(下标，元素)，在❗指定下标位置，插入指定的元素
# list.insert(0,"pig")
# print(list)
# 语法：列表.append(元素),在列表尾部加入❗‘单个’❗新元素
# list.append("k")
# print(list)
# 语法：列表.extend(❗其它数据容器)，在❗· 列表尾部追加一堆元素
# list.extend(['1',"2",'3','4'])
# print(list)
# 3删除元素
#通过指定下标删除元素
#  语法1：del列表[下标]
# del list[2]
# print(list)
#   语法2:列表.pop(下标)
# list.pop(3)
# print(list)
#通过指定元素先删除列表中出现的第一个指定元素
# 语法:列表.remove('i')
# list.remove('i')
# print(list)
# 3清空列表-清空整个列表
#语法；列表.clear()
# list.clear()
# print(list)
# 4修改元素--修改特定位置元素值；语法：列表[下标]=值
# list[0]='happy'
# print(list)
# 5统计某个元素个数
# 语法；列表.count(元素)
# list=['i',"t",'p','o','i']
# print(list.count("i"))
# 6统计列表内全部元素的个数
# #语法：len（列表）
# list=['i',"t",'p','o','i']
# count=len(list)
# print(f"列表list一共有{count}个元素")
#
# 列表.append(元素)       向列表中追加一个元素
# 列表.extend(容器)       将数据容器的内容依次取出，追加到列表尾部
# 列表.insert(下标, 元素)  在指定下标处，插入指定的元素
# del 列表[下标]          删除列表指定下标元素
# 列表.pop(下标)          删除列表指定下标元素
# 列表.remove(元素)       从前向后，删除此元素第一个匹配项
# 列表.clear()           清空列表
# 列表.count(元素)        统计此元素在列表中出现的次数
# 列表.index(元素)        查找指定元素在列表的下标找不到报错ValueError
# len(列表)              统计容器内有多少元素

# 课后习题
# 有一个列表，内容是:[21,25,21,23,22,20]，记录的是一批学生的年龄
# 请通过列表的功能(方法)，对其进行
# 1.定义这个列表，并用变量接收它
# 2.追加一个数字31，到列表的尾部
# 3.追加一个新列表[29,33,30]到列表的尾部
# 4.取出第一个元素(应是: 21)
# 5.取出最后一个元素(应是:30)
# 6.查找元素31，在列表中的下标位置
# list=[21,25,21,23,22,20]
# h=list
# h.append(31)
# h.extend([29,33,30])
# print(h[0])
# print(h[-1])
# list.index(31)
# print(list.index(31))
# print(list)

#列表的遍历方法：For循环&While循环

#While循环遍历列表--语法：
# index=0
# while index <len(列表):
#     元素=列表[index]
#     对元素进行处理
#     index+=1
# eg：
# list=["a","b","c"]
# index=0#定义变量标记列表下标，初始值=0
# while index<len(list):#设置循环条件
#     element=list[index]
#     print(f"列表的元素：{element}")
#     index+=1#每次循环+1































   
   

   












        

























